home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / othello.bas (.txt) < prev    next >
Encoding:
GW-BASIC  |  1984-04-24  |  5.6 KB  |  238 lines

  1. 10  KEY OFF
  2. 20  DIM A(200),A1(100)
  3. 30  CLS
  4. 40  U=33
  5. 50  V=66
  6. 60  DATA   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
  7. 70  DATA   0, -99,  -1, -15, -15, -15, -15,  -1, -99,   0
  8. 80  DATA   0,  -1,  -1,  -5,  -5,  -5,  -5,  -1,  -1,   0
  9. 90  DATA   0, -15,  -5, -12, -10, -10, -12,  -5, -15,   0
  10. 100  DATA   0, -15,  -5, -10,   1,   2, -10,  -5, -15,   0
  11. 110  DATA   0, -15,  -5, -10,   1,   2, -10,  -5, -15,   0
  12. 120  DATA   0, -15,  -5, -12, -10, -10, -12,  -5, -15,   0
  13. 130  DATA   0,  -1,  -1,  -5,  -5,  -5,  -5,  -1,  -1,   0
  14. 140  DATA   0, -99,  -1, -15, -15, -15, -15,  -1, -99,   0
  15. 150  DATA   0,   0,   0,   0,   0,   0,   0,   0,   0,   0
  16. 160  ROW=5
  17. 170  COL=5
  18. 180  RESTORE
  19. 190  FOR I=0 TO 99
  20. 200    READ A(I)
  21. 210    A1(I)=A(I)
  22. 220  NEXT I
  23. 230  INPUT "SKILL LEVEL (1 TO 5)";Z2
  24. 240  ON Z2 GOTO 300, 290, 280, 270, 260
  25. 250  GOTO 230
  26. 260  A(81)=2
  27. 270  A(18)=2
  28. 280  A(88)=2
  29. 290  A(11)=2
  30. 300  INPUT "WHO STARTS (1=ME  2=YOU)";Z
  31. 310  FOR I=9 TO 12
  32. 320    J=11*(I\12)
  33. 330    A(91+I)=I-J
  34. 340    A(95+I)=J-I
  35. 350  NEXT I
  36. 360  GOSUB 1660
  37. 370  GOSUB 1370
  38. 380  IF Z=2 THEN 830
  39. 390  LOCATE 5,65:PRINT "I'M THINKING";
  40. 400  C=0
  41. 410  D=0
  42. 420  FOR F=U TO V
  43. 430    IF A(F)=0 THEN F=F+2
  44. 440    IF A(F)>0 THEN 570
  45. 450    B=0
  46. 460    FOR K=100 TO 107
  47. 470      J=F
  48. 480      A=0
  49. 490      J=J+A(K)
  50. 500      IF A(J)<1 THEN 530
  51. 510      IF A(J)=1 THEN A=A-A(F): GOTO 490
  52. 520      B=B+A
  53. 530    NEXT K
  54. 540    IF B=0 GOTO 570
  55. 550    IF B>C THEN C=B: A(108)=F: D=1
  56. 560    IF B=C THEN A(108+D)=F: D=D+1
  57. 570  NEXT F
  58. 580  IF C>0 THEN 640
  59. 590  LOCATE 7,60
  60. 600  PRINT "I HAVE NO MOVES!"
  61. 610  IF Q=1 THEN 1480
  62. 620  S5=1
  63. 630  GOTO 830
  64. 640  I=A(107+INT(D*RND(1)+1))
  65. 650  ROW=I\10
  66. 660  COL=I-ROW*10
  67. 670  A(I)=2
  68. 680  GOSUB 1250
  69. 690  J=I
  70. 700  Q=0
  71. 710  FOR K=100 TO 107
  72. 720    A=0
  73. 730    I=J
  74. 740    I=I+A(K)
  75. 750    IF A(I)<1 THEN 810
  76. 760    IF A(I)=2 THEN 790
  77. 770    A=A+1
  78. 780    GOTO 740
  79. 790    I=J
  80. 800    IF A>0 THEN Z=Z: FOR L=1 TO A: I=I+A(K): A(I)=2: GOSUB 1250: NEXT L
  81. 810  NEXT K
  82. 820  GOSUB 1370
  83. 830  GOSUB 1950
  84. 840  M=INT(M)
  85. 850  IF M=0 THEN 1220
  86. 860  IF M=1 THEN Z=Z: GOSUB 1660: GOSUB 1370: GOTO 830
  87. 870  IF M=2 THEN S1=0: S2=64: GOTO 1480
  88. 880  IF M=3 THEN 9200
  89. 890  IF M=4 THEN 1560
  90. 900  IF (M<11) OR (M>88) OR (A(M)>0) GOTO 1180
  91. 910  S5=0
  92. 920  B=0
  93. 930  FOR K=100 TO 107
  94. 940    J=M
  95. 950    A=0
  96. 960    J=J+A(K)
  97. 970    IF A(J)<1 THEN 1080
  98. 980    IF A(J)=2 THEN A=A+1: GOTO 960
  99. 990    I=M
  100. 1000    IF A=0 THEN 1080
  101. 1010    IF A(I)<0 THEN A(I)=1: GOSUB 1250
  102. 1020    FOR Z1=1 TO A
  103. 1030      I=I+A(K)
  104. 1040      A(I)=1
  105. 1050      B=B+1
  106. 1060      GOSUB 1250
  107. 1070    NEXT Z1
  108. 1080  NEXT K
  109. 1090  IF B=0 THEN 1180
  110. 1100  W=M-11
  111. 1110  IF W<U THEN U=W
  112. 1120  IF A(U)=0 THEN U=U+1: GOTO 1120
  113. 1130  W=M+11
  114. 1140  IF W>V THEN V=W                           
  115. 1150  IF A(V)=0 THEN V=V-1: GOTO 1150
  116. 1160  GOSUB 1370
  117. 1170  GOTO 390
  118. 1180  LOCATE 8,65
  119. 1190  PRINT "ILLEGAL MOVE"
  120. 1200  GOSUB 1460
  121. 1210  GOTO 830
  122. 1220  IF S5=1 THEN 1480
  123. 1230  Q=1
  124. 1240  GOTO 390
  125. 1250  IF I<11 OR I>88 THEN 1360
  126. 1260  R=I\10
  127. 1270  C=7*(I-R*10)-2
  128. 1280  R=3*R-1
  129. 1290  IF A(I)=2 THEN PIECE$=CHR$(176)+CHR$(176): GOTO 1310 ELSE PIECE$=CHR$(178)+CHR$(178)
  130. 1300  IF A(I)=1 THEN PIECE$=CHR$(178)+CHR$(178) ELSE GOTO 1360
  131. 1310  PIECE$=PIECE$+PIECE$
  132. 1320  LOCATE R,C
  133. 1330  PRINT PIECE$;
  134. 1340  LOCATE R+1,C
  135. 1350  PRINT PIECE$;
  136. 1360  RETURN
  137. 1370  S1=0                      
  138. 1380  S2=0
  139. 1390  FOR I=11 TO 88: IF A(I)=1 THEN S1=S1+1
  140. 1400  IF A(I)=2 THEN S2=S2+1
  141. 1410  NEXT I
  142. 1420  LOCATE 3,65
  143. 1430  PRINT S1;"     ";S2;
  144. 1440  IF (S1=0) OR (S2=0) OR (S1+S2=64) THEN 1490
  145. 1450  RETURN                                          
  146. 1460  SOUND 2000,1
  147. 1470  RETURN
  148. 1480  GOSUB 1460
  149. 1490  LOCATE 1,60
  150. 1500  IF S1=S2 THEN PRINT "TIED GAME": GOTO 1530
  151. 1510  IF S1>S2 THEN PRINT "YOU WIN": GOTO 840
  152. 1520  PRINT "COMPUTER WINS !!!!"
  153. 1530  LOCATE 10,60
  154. 1540  INPUT "PLAY AGAIN (1=YES)";M
  155. 1550  IF M=1 GOTO 30
  156. 1560  '*************************************************************************
  157. 1570  '* REVERSE SIDES
  158. 1580  '*************************************************************************
  159. 1590  FOR I=11 TO 88
  160. 1600    IF A(I)=1 THEN A(I)=2: GOSUB 1250: GOTO 1620
  161. 1610    IF A(I)=2 THEN A(I)=1: GOSUB 1250
  162. 1620  NEXT I
  163. 1630  GOSUB 1370
  164. 1640  GOSUB 1460
  165. 1650  GOTO 830
  166. 1660  '*************************************************************************
  167. 1670  '*  DRAW BOARD
  168. 1680  '*************************************************************************
  169. 1690  CLS
  170. 1700  TEMP$=STRING$(3,CHR$(205))
  171. 1710  TOP$=TEMP$+CHR$(209)+TEMP$
  172. 1720  TOP$=TOP$+TOP$+TOP$+TOP$+TOP$+TOP$+TOP$
  173. 1730  TOP$=CHR$(201)+TEMP$+TOP$+TEMP$+CHR$(187)
  174. 1740  BOT$=TEMP$+CHR$(207)+TEMP$
  175. 1750  BOT$=CHR$(200)+TEMP$+BOT$+BOT$+BOT$+BOT$+BOT$+BOT$+BOT$+TEMP$+CHR$(188)
  176. 1760  V$=CHR$(179)+STRING$(6," ")
  177. 1770  V$=V$+V$+V$+V$+V$+V$+V$+V$+CHR$(186)
  178. 1780  MID$(V$,1,1)=CHR$(186)
  179. 1790  H$=STRING$(6,CHR$(196))+CHR$(197)
  180. 1800  H$=CHR$(199)+H$+H$+H$+H$+H$+H$+H$+STRING$(6,CHR$(196))+CHR$(182)
  181. 1810  LOCATE 1,3
  182. 1820  COLOR 0,7
  183. 1830  PRINT TOP$
  184. 1840  FOR J=1 TO 23
  185. 1850    LOCATE J+1,3
  186. 1860    IF (J\3)*3=J THEN PRINT H$; ELSE PRINT V$;
  187. 1870  NEXT J
  188. 1880  LOCATE 25,3
  189. 1890  PRINT BOT$;
  190. 1900  COLOR 7,0
  191. 1910  FOR I=11 TO 88
  192. 1920    GOSUB 1250
  193. 1930  NEXT I
  194. 1940  RETURN
  195. 1950  '*************************************************************************
  196. 1960  LOCATE 5,65
  197. 1970  PRINT STRING$(14," ");
  198. 1980  LOCATE (3*ROW)-1,(7*COL)-1,1
  199. 1990  A$=INKEY$
  200. 2000  IF LEN(A$)=0 THEN 1990
  201. 2010  IF LEN(A$)=2 THEN 2050
  202. 2020  IF ASC(A$)=&HD THEN 2290
  203. 2030  IF A$="R" OR A$="r" THEN 1560
  204. 2040  IF A$="P" OR A$="p" THEN 390
  205. 2050  KEYIN=ASC(RIGHT$(A$,1))-71
  206. 2060  IF KEYIN <=0 THEN 1990
  207. 2070  ON KEYIN GOTO 2090, 1990, 1990, 2140, 1990, 2190, 1990, 1990, 2240, 1990
  208. 2080  GOTO 1990
  209. 2090  '*************************************************************************
  210. 2100  '* CURSOR UP
  211. 2110  '*************************************************************************
  212. 2120  IF ROW=1 THEN ROW=8 ELSE ROW=ROW-1
  213. 2130  GOTO 1980
  214. 2140  '*************************************************************************
  215. 2150  '* CURSOR LEFT
  216. 2160  '*************************************************************************
  217. 2170  IF COL=1 THEN COL=8 ELSE COL=COL-1
  218. 2180  GOTO 1980
  219. 2190  '*************************************************************************
  220. 2200  '* CURSOR RIGHT
  221. 2210  '*************************************************************************
  222. 2220  IF COL=8 THEN COL=1 ELSE COL=COL+1
  223. 2230  GOTO 1980
  224. 2240  '*************************************************************************
  225. 2250  '* CURSOR DOWN
  226. 2260  '*************************************************************************
  227. 2270  IF ROW=8 THEN ROW=1 ELSE ROW=ROW+1
  228. 2280  GOTO 1980
  229. 2290  '*************************************************************************
  230. 2300  '* INSERT
  231. 2310  '*************************************************************************
  232. 2320  M=10*ROW+COL
  233. 2330  LOCATE 8,65,0
  234. 2340  PRINT STRING$(14," ");
  235. 2350  LOCATE 7,60
  236. 2360  PRINT STRING$(19," ");
  237. 2370  RETURN
  238.